<?php

/**
 * 获取配置值，设置配置值
 *
 * @return void
 */
function config( $name = null, $value = null )
{
    static $_config = array( );

    if ( empty( $name ) )
        return $_config;

    if ( is_string( $name ) ) {
        $name = strtolower( $name );
        if ( is_null( $value ) ) {
            return isset( $_config[$name] ) ? $_config[$name] : null;
        }
        $_config[$name] = $value;
        return null;
    }

    if ( is_array( $name ) ) {
        $_config = array_merge( $_config, array_change_key_case( $name ) );
    }

    return null;
}

// 获取指定协议值，设置协议值
function protocol( $name = null, $value = null )
{
    static $_protocol = array( );

    if ( empty( $name ) )
        return $_protocol;

    if ( is_string( $name ) ) {
        $name = strtolower( $name );
        if ( is_null( $value ) ) {
            return isset( $_protocol[$name] ) ? $_protocol[$name] : null;
        }
        $_protocol[$name] = $value;
        return;
    }

    if ( is_array( $name ) ) {
        $_protocol = array_merge( $_protocol, array_change_key_case( $name, CASE_UPPER ) );
    }

    return null;
}

// 优化的require_once
function require_cache( $filename )
{
    static $_importFiles = array( );
    if ( !isset( $_importFiles[$filename] ) ) {
        if ( file_exists_case( $filename ) ) {
            echo 'require:' . $filename;
            echo '<BR>';
            require $filename;
            $_importFiles[$filename] = true;
        }
        else {
            $_importFiles[$filename] = false;
        }
    }
    return $_importFiles[$filename];
}

// 区分大小写的文件存在判断
function file_exists_case( $filename )
{
    if ( is_file( $filename ) ) {
        if ( IS_WIN ) {
            if ( basename( realpath( $filename ) ) != basename( $filename ) )
                return false;
        }
        return true;
    }
    return false;
}

/**
 * 获取指定协议值
 * $part 'cmd' 'scmd' '' ...
 */
function get_protocol( $request, $part ) 
{
	$pos = -99;
	switch ( $part ) {
		case 'cmd':
			$pos = 0;
			break;
		case 'scmd':
			$pos = 1;
			break;
		default:
			return null;
			break;
	}
	
	return array_slice( $request, $pos);
}

?>